package com.cnap.db.mapper;

import com.cnap.db.entity.MicroServicePO;
import com.cnap.model.indicator.QuerySceneParam;
import com.cnap.model.schedule.QueryMicroServiceParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 微服务mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface MicroServiceMapper {


    /**
     * 插入微服务信息
     *
     * @param microServicePO 微服务信息
     * @return 结果
     */
    int insertMicroService(@Param("microService") MicroServicePO microServicePO);

    /**
     * 根据应用id查询
     *
     * @param applicationId 应用id
     * @return 结果
     */
    List<MicroServicePO> selectMicroServiceByAppId(@Param("appId") String applicationId);

    /**
     * 根据参数查询
     *
     * @param param 参数
     * @return 结果
     */
    List<MicroServicePO> selectMicroServiceByParam(@Param("param") QueryMicroServiceParam param);

    /**
     * 根据参数查询（带用户）已部署的微服务（状态不为0或-1）
     *
     * @param param    参数
     * @param userName 用户
     * @return 结果
     */
    List<MicroServicePO> selectDeployedMicroServiceByParamWithUser(@Param("param") QueryMicroServiceParam param,
                                                                   @Param("userName") String userName);

    /**
     * 查询已经有策略的微服务
     *
     * @param param    参数
     * @param userName 用户名
     * @return 结果
     */
    List<MicroServicePO> selectMicroServiceWithStrategyByParam(@Param("param") QueryMicroServiceParam param, @Param(
            "userName") String userName);


    /**
     * 根据应用id删除微服务信息
     *
     * @param applicationId 应用id
     * @return 结果
     */
    int deleteMicroServiceByAppId(@Param("appId") String applicationId);

    /**
     * 根据服务id查询微服务信息
     *
     * @param serviceId 服务id
     * @return 结果
     */
    MicroServicePO selectMicroServiceById(@Param("id") String serviceId);

    /**
     * 更新微服务状态
     *
     * @param serviceId 服务id
     * @param status    状态
     * @return 结果
     */
    int updateMicroServiceStatus(@Param("id") String serviceId, @Param("status") int status);

    /**
     * 模糊查询微服务名称
     *
     * @param querySceneParam 参数
     * @return 结果
     */
    List<String> selectLikeName(@Param("param") QuerySceneParam querySceneParam);
}
